As computer technology has evolved, software systems have grown in sophistication to support a wide variety of applications and to provide a wide range of features. However, as software complexity increases, the task of debugging and supporting software has become increasingly more difficult. During the software development process, multiple software teams often simultaneously develop different software components which are integrated into a software product that spans a distributed network runtime environment. In such an environment, detecting software faults and determining the source of such faults can be extremely challenging, or even impossible.
Successful software development and support often depends on the ability to log information that can be used to re-create conditions that lead to software faults or unexpected results. However, the availability of such logging information depends on developers following best practices, which involves logging all relevant state and events to system and/or error logs. When developers fail to log the appropriate events and/or system state, the ability to troubleshoot problems is significantly reduced.